/**
 * 
 */
package com.hengpeng.itfinoss.service;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;

import com.hengpeng.common.acl.vo.Passport.Token;
import com.hengpeng.common.persist.entity.AbstractEntity.BoolValue;
import com.hengpeng.common.persist.query.model.Order.OrderType;
import com.hengpeng.itfinbase.persist.AppGroup;
import com.hengpeng.itfinbase.persist.AppRole;
import com.hengpeng.itfinbase.persist.AppUser;
import com.hengpeng.itfinbase.persist.AppUser.UserStatus;
import com.hengpeng.itfinbase.persist.PermissionPo;
import com.hengpeng.itfinbase.persist.ShortcutMenu;

/**
 * @author linriqing
 */
public interface AppUserService
{

	/**
	 * <pre>
	 *	保存用户信息 
	 * </pre>
	 * @param userNo
	 * @param loginName
	 * @param nickName
	 * @param password
	 * @param realName
	 * @param phone
	 * @param email
	 * @param state
	 * @param token
	 * @param groups
	 * @param roles
	 * @param counterId
	 * @return
	 */
	AppUser save(String userNo, String loginName, String nickName, String password, String realName, String phone,
			String email, UserStatus state, Token token, Set<AppGroup> groups, Set<AppRole> roles);

	/**
	 * <pre>
	 *  修改用户信息
	 * </pre>
	 * @param id
	 * @param userNo
	 * @param loginName
	 * @param nickName
	 * @param newPwd
	 * @param realName
	 * @param phone
	 * @param email
	 * @param state
	 * @param token
	 * @param lastLogin
	 * @param groups
	 * @param roles
	 * @return
	 */
	AppUser modify(Long id, String userNo, String loginName, String nickName, String newPwd, String realName,
			String phone, String email, UserStatus state, Token token, Date lastLogin, Set<AppGroup> groups,
			Set<AppRole> roles);

	/**
	 * <pre>
	 *  动态分页查询用户信息
	 * </pre>
	 * @param loginName
	 * @param userNo
	 * @param realName
	 * @param email
	 * @param currentPage
	 * @param pageSize
	 * @param sort
	 * @param counterId
	 * @return
	 */
	List<AppUser> findUsers(String loginName, String userNo, String realName, String email, int currentPage,
			int pageSize, LinkedHashMap<String, OrderType> sort, String counterId);

	/**
	 * <pre>
	 *  根据角色ID查询角色
	 * </pre>
	 * @param ids
	 * @return
	 */
	List<AppRole> findUserRoleByIds(Long[] ids);

	/**
	 * <pre>
	 *  根据分组ID查询分组
	 * </pre>
	 * @param ids
	 * @return
	 */
	List<AppGroup> findGroupByIds(Long[] ids);

	/**
	 * <pre>
	 * 根据用户ID查询用户
	 * </pre>
	 * @param ids
	 * @return
	 */
	List<AppUser> findUserByIds(Long[] ids);

	/**
	 * <pre>
	  *  批量删除用户
	  * </pre>
	 * @param operateUser
	 * @param userId
	 */
	void delete(String operateUser, Set<Object> userId);

	/**
	 * <pre>
	 *  动态分页查询角色信息
	 * </pre>
	 * @param name
	 * @param currentPage
	 * @param pageSize
	 * @param sort
	 * @return
	 */
	List<AppRole> findRoleWithPage(String name, int currentPage, int pageSize, LinkedHashMap<String, OrderType> sort);

	Long findRoleCount(String name);

	List<AppRole> findUserRoles(Long[] ids, String name);

	/**
	 * <pre>
	 *  保存角色实体
	 * </pre>
	 * @param name
	 * @param description
	 * @param permissions
	 * @return
	 */
	AppRole saveRole(String name, String description, Set<PermissionPo> permissions);

	/**
	 * <pre>
	 *  批量删除角色
	 * </pre>
	 * @param roleId
	 */
	void deleteRole(Set<Object> roleId);

	/**
	 * <pre>
	 *  修改角色
	 * </pre>
	 * @param id
	 * @param name
	 * @param description
	 * @param permissions
	 * @return
	 */
	AppRole modifyRole(Long id, String name, String description, Set<PermissionPo> permissions);

	/**
	 * <pre>
	 *  分组按级排序
	 * </pre>
	 * @param groupId
	 * @return
	 */
	Set<AppGroup> findAllGroupSort(Long groupId);

	/**
	 * <pre>
	 *  查询分组的字分组
	 * </pre>
	 * @param ids
	 * @return
	 */
	List<AppGroup> findChildByIds(Long[] ids);

	/**
	 * <pre>
	 *  保存分组信息
	 * </pre>
	 * @param name
	 * @param description
	 * @param parent
	 * @param extValue
	 * @return
	 */
	AppGroup saveGroup(String name, String description, AppGroup parent, String extValue);

	/**
	 * <pre>
	 *  批量删除分组信息
	 * </pre>
	 * @param ids
	 */
	void deleteGroup(Set<Object> ids);

	/**
	 * <pre>
	 *   更新分组信息
	 * </pre>
	 * @param id
	 * @param name
	 * @param description
	 * @param parent
	 * @param extValue
	 * @return
	 */
	AppGroup modifyGroup(Long id, String name, String description, AppGroup parent, String extValue);

	/**
	 * <pre>
	 *  动态分页查询分组信息
	 * </pre>
	 * @param name
	 * @param parentId
	 * @param currentPage
	 * @param pageSize
	 * @param sort
	 * @return
	 */
	List<AppGroup> findGroupWithPage(String name, Long parentId, int currentPage, int pageSize,
			LinkedHashMap<String, OrderType> sort);

	Long findGroupCount(String name, Long parentId);

	/**
	 * <pre>
	 *  动态分页查询快捷菜单
	 * </pre>
	 * @param userId
	 * @param value
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	List<ShortcutMenu> findShortcutMenu(Long userId, BoolValue value, Integer pageIndex, Integer pageSize);

	Long findShortcutMenuCount(Long userId, BoolValue value);

	/**
	 * <pre>
	 *  动态分页查询共享快捷菜单
	 * </pre>
	 * @param excludeUserId
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	List<ShortcutMenu> findShareShortcutMenu(Long excludeUserId, Integer pageIndex, Integer pageSize);

	Long findShareShortcutMenuCount(Long excludeUserId);

	/**
	 * <pre>
	 *  保存快捷菜单
	 * </pre>
	 * @param menu
	 */
	void saveShortcutMenu(ShortcutMenu menu);

	/**
	 * <pre>
	 *  修改快捷菜单
	 * </pre>
	 * @param menu
	 */
	void modifyShortcutMenu(ShortcutMenu menu);

	/**
	 * <pre>
	 *  删除快捷菜单
	 * </pre>
	 * @param id
	 */
	void removeShortcutMenu(Long[] id);

}
